package Modelo;


public class Laser implements Habilidad {

	private Numeros potencia;
	private int vidaUtil;
	private boolean ejecuto=false;
	
	public Laser(){
		potencia= new Entero(Constantes.potenciaLaser);
		vidaUtil=Constantes.vidaUtilLaser;
	}
	
	/**
	 * El ejecutor dispara el laser
	 * @param ejecutor
	 */
	
	public void ejecutarSobre(PoseedorDeHabilidad ejecutor) {
		// bloque frente
		if(vidaUtil>0){
			Bloque bloqueADestruir = ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,ejecutor.getSentido());
			bloqueADestruir.atacar(potencia);
			vidaUtil--;
			ejecuto=true;
			if(vidaUtil==0){
				ejecutor.eliminarHabilidad(this);				
			}			
	//		System.out.println("le dispare, me queda " + vidaUtil);
			
		}		
		else{
			ejecutor.eliminarHabilidad(this);
		}
	}

	/**
	 * Indica si el ejecutor puede disparar el laser 
	 * @param ejecutor
	 * @return boolean
	 */
	
	public boolean esEjecutableSobre(PoseedorDeHabilidad ejecutor) {
		if(vidaUtil<=0){
			ejecutor.eliminarHabilidad(this);
			return false;
		}
		if(ejecutor.getSentidoVertical()!=Constantes.reposo)
			return false;
		try{
			return ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor,1,ejecutor.getSentido()).esFirme();
		}
		catch(FueraDelMapaException e){
			return false;
		}
	}

	/**
	 * Tiempo que tarda la habilidad en ejecutarse
	 * @param ejecutor
	 * @return long
	 */
	
	public long tiempoDeEjecucion(PoseedorDeHabilidad ejecutor) {
		return Constantes.tiempoCiclo;
	}

	@Override
	public boolean seEjecuto() {
		if(ejecuto==false)
			return false;
		ejecuto=false;
		return true;
	}

}

